package com.ljh.cloudmusic.utils;

import com.ljh.cloudmusic.model.User;
import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import javax.crypto.SecretKey;
import java.util.Date;

/**
 * @author: Themberfue
 * @date: 2025/3/13 23:33
 * @description:
 */

public class JwtUtils {
    // 生成一个密钥（保证安全性）
    private static final SecretKey SECRET_KEY = Keys.hmacShaKeyFor("MySecretKeyForJwtTokenMySecretKeyForJwtToken".getBytes());
    private static final long EXPIRATION_TIME = 1000 * 60 * 60; // 1小时

    // TODO 生成 Token
    public static String generateToken(String username) {
        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(new Date()) // 签发时间
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 过期时间
                .signWith(SECRET_KEY, SignatureAlgorithm.HS256) // 加密方式
                .compact();
    }

    // TODO 从 Token 解析用户名
    public static String getUsernameFromToken(String token) {
        Claims claims = parseClaims(token);
        return claims != null ? claims.getSubject() : null;
    }

    private static Claims parseClaims(String token) {
        try {
            return Jwts.parserBuilder()
                    .setSigningKey(SECRET_KEY)
                    .build()
                    .parseClaimsJws(token)
                    .getBody();
        } catch (JwtException e) {
            return null;
        }
    }

    // TODO 验证 Token是否有效
    public static boolean isTokenValid(String token) {
        try {
            Jwts.parserBuilder()
                    .setSigningKey(SECRET_KEY)
                    .build()
                    .parseClaimsJws(token);
            return true;
        } catch (JwtException e) {
            return false;
        }
    }

}

